package com.tencent.wxcloudrun.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 1、添加位置
 * 2、根据给定的中心点，返回与中心点距离在指定范围内的成员
 * 3、从指定的Geo键中移除一个或多个成员
 */
@Component
@Slf4j
public class DistanceUtils {

    // 地球半径，单位为米
    private static final double EARTH_RADIUS = 6378137.0;

    /**
     * 计算两个经纬度坐标点之间的距离
     *
     * @param lat1 第一个点的纬度，单位为度
     * @param lon1 第一个点的经度，单位为度
     * @param lat2 第二个点的纬度，单位为度
     * @param lon2 第二个点的经度，单位为度
     * @return 两点之间的距离，单位为米
     */
    public double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
        // 将经纬度从度转换为弧度
        double radLat1 = Math.toRadians(lat1);
        double radLon1 = Math.toRadians(lon1);
        double radLat2 = Math.toRadians(lat2);
        double radLon2 = Math.toRadians(lon2);

        // 计算纬度和经度的差值
        double deltaLat = radLat2 - radLat1;
        double deltaLon = radLon2 - radLon1;

        // 使用Haversine公式计算距离
        double a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2)
                + Math.cos(radLat1) * Math.cos(radLat2)
                * Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

        return EARTH_RADIUS * c;
    }
}
